tg-me.com/golangtests/764
Last Update:
ΠΠ°Π΄Π°ΡΠ°: Π§ΡΠΎ Π²ΡΠ²Π΅Π΄Π΅Ρ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΠΊΠΎΠ΄ ΠΏΡΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ ΠΈ Π·Π°ΠΏΡΡΠΊΠ΅ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Go 1.24?
package main
import (
"fmt"
"sync"
"time"
)
func main() {
var wg sync.WaitGroup
count := 3
fmt.Println("ΠΠ°ΠΏΡΡΠΊ Π³ΠΎΡΡΡΠΈΠ½...")
wg.Add(count)
for i := 0; i < count; i++ {
// ΠΠ°ΠΏΡΡΠΊΠ°Π΅ΠΌ Π³ΠΎΡΡΡΠΈΠ½Ρ Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΡΠ΅ΡΠ°ΡΠΈΠΈ
go func() {
defer wg.Done()
// ΠΠΌΠΈΡΠΈΡΡΠ΅ΠΌ Π½Π΅Π±ΠΎΠ»ΡΡΡΡ ΡΠ°Π±ΠΎΡΡ
time.Sleep(time.Duration(10) * time.Millisecond)
// ΠΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΡΠΈΠΊΠ»Π° 'i' Π²Π½ΡΡΡΠΈ Π³ΠΎΡΡΡΠΈΠ½Ρ
fmt.Printf("ΠΠΎΡΡΡΠΈΠ½Π° Π²ΠΈΠ΄ΠΈΡ i = %d\n", i)
}()
}
fmt.Println("ΠΠΆΠΈΠ΄Π°Π½ΠΈΠ΅ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ Π³ΠΎΡΡΡΠΈΠ½...")
wg.Wait()
fmt.Println("ΠΡΠ΅ Π³ΠΎΡΡΡΠΈΠ½Ρ Π·Π°Π²Π΅ΡΡΠ΅Π½Ρ.")
}
Π Π°Π·Π±ΠΎΡ:
ΠΠΎΠ³Π΄Π° Π³ΠΎΡΡΡΠΈΠ½Ρ ΡΠ΅Π°Π»ΡΠ½ΠΎ Π½Π°ΡΠΈΠ½Π°Π»ΠΈ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ (ΠΏΠΎΡΠ»Π΅ Π½Π΅Π±ΠΎΠ»ΡΡΠΎΠΉ Π·Π°Π΄Π΅ΡΠΆΠΊΠΈ time.Sleep), ΡΠΈΠΊΠ» for, ΡΠΊΠΎΡΠ΅Π΅ Π²ΡΠ΅Π³ΠΎ, ΡΠΆΠ΅ Π·Π°Π²Π΅ΡΡΠ°Π»ΡΡ. Π ΡΡΠΎΠΌΡ ΠΌΠΎΠΌΠ΅Π½ΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ i ΠΈΠΌΠ΅Π»Π° Π±Ρ ΡΠ²ΠΎΠ΅ ΠΊΠΎΠ½Π΅ΡΠ½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ (Π² Π΄Π°Π½Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ 3, ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΡΠΈΠΊΠ» Π·Π°Π²Π΅ΡΡΠ°Π΅ΡΡΡ, ΠΊΠΎΠ³Π΄Π° i ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ ΡΠ°Π²Π½ΡΠΌ count).
ΠΠΎΡΡΠΎΠΌΡ Π² ΡΡΠ°ΡΡΡ Π²Π΅ΡΡΠΈΡΡ Go ΡΡΠΎΡ ΠΊΠΎΠ΄, ΡΠΊΠΎΡΠ΅Π΅ Π²ΡΠ΅Π³ΠΎ, Π²ΡΠ²Π΅Π» Π±Ρ:
ΠΠ°ΠΏΡΡΠΊ Π³ΠΎΡΡΡΠΈΠ½...
ΠΠΆΠΈΠ΄Π°Π½ΠΈΠ΅ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ Π³ΠΎΡΡΡΠΈΠ½...
ΠΠΎΡΡΡΠΈΠ½Π° Π²ΠΈΠ΄ΠΈΡ i = 3
ΠΠΎΡΡΡΠΈΠ½Π° Π²ΠΈΠ΄ΠΈΡ i = 3
ΠΠΎΡΡΡΠΈΠ½Π° Π²ΠΈΠ΄ΠΈΡ i = 3
ΠΡΠ΅ Π³ΠΎΡΡΡΠΈΠ½Ρ Π·Π°Π²Π΅ΡΡΠ΅Π½Ρ.
(ΠΠΎΡΡΠ΄ΠΎΠΊ ΡΡΡΠΎΠΊ "ΠΠΎΡΡΡΠΈΠ½Π° Π²ΠΈΠ΄ΠΈΡ..." ΠΌΠΎΠ³ Π±ΡΡΡ ΡΠ°Π·Π½ΡΠΌ). Π§ΡΠΎΠ±Ρ ΠΎΠ±ΠΎΠΉΡΠΈ ΡΡΠΎ, ΡΠ°Π½ΡΡΠ΅ ΠΏΡΠΈΡ ΠΎΠ΄ΠΈΠ»ΠΎΡΡ Π΄Π΅Π»Π°ΡΡ ΡΠ°ΠΊ: i := i Π²Π½ΡΡΡΠΈ ΡΠΈΠΊΠ»Π° ΠΏΠ΅ΡΠ΅Π΄ Π·Π°ΠΏΡΡΠΊΠΎΠΌ Π³ΠΎΡΡΡΠΈΠ½Ρ, ΡΡΠΎΠ±Ρ ΡΠΎΠ·Π΄Π°ΡΡ ΠΊΠΎΠΏΠΈΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΡΠ΅ΡΠ°ΡΠΈΠΈ.
ΠΠΎΠ²ΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ (Go 1.22 ΠΈ Π½ΠΎΠ²Π΅Π΅, Π²ΠΊΠ»ΡΡΠ°Ρ 1.24): ΠΠ°ΡΠΈΠ½Π°Ρ Ρ Go 1.22, ΡΠ΅ΠΌΠ°Π½ΡΠΈΠΊΠ° ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΡΠΈΠΊΠ»Π° for Π±ΡΠ»Π° ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Π° Π΄Π»Ρ ΠΏΡΠ΅Π΄ΠΎΡΠ²ΡΠ°ΡΠ΅Π½ΠΈΡ ΡΡΠΎΠΉ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½Π΅Π½Π½ΠΎΠΉ ΠΎΡΠΈΠ±ΠΊΠΈ. Π’Π΅ΠΏΠ΅ΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ ΡΠΈΠΊΠ»Π° (i Π² Π½Π°ΡΠ΅ΠΌ ΡΠ»ΡΡΠ°Π΅) ΠΏΠ΅ΡΠ΅ΡΠΎΠ·Π΄Π°Π΅ΡΡΡ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΡΠ΅ΡΠ°ΡΠΈΠΈ.
ΠΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ ΠΊΠ°ΠΆΠ΄Π°Ρ Π³ΠΎΡΡΡΠΈΠ½Π° Π·Π°Ρ Π²Π°ΡΡΠ²Π°Π΅Ρ ΡΠ²ΠΎΡ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΡ ΠΊΠΎΠΏΠΈΡ i, ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π½Π° ΠΌΠΎΠΌΠ΅Π½Ρ ΡΡΠΎΠΉ ΠΈΡΠ΅ΡΠ°ΡΠΈΠΈ.
ΠΠΆΠΈΠ΄Π°Π΅ΠΌΡΠΉ Π²ΡΠ²ΠΎΠ΄ (Go 1.24): ΠΠ»Π°Π³ΠΎΠ΄Π°ΡΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Π² Go 1.22, ΠΊΠ°ΠΆΠ΄Π°Ρ Π³ΠΎΡΡΡΠΈΠ½Π° ΡΠ΅ΠΏΠ΅ΡΡ ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎ Π²ΠΈΠ΄ΠΈΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ i ΡΠΎΠΉ ΠΈΡΠ΅ΡΠ°ΡΠΈΠΈ, Π² ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΎΠ½Π° Π±ΡΠ»Π° Π·Π°ΠΏΡΡΠ΅Π½Π°. ΠΠΎΡΡΠΎΠΌΡ Π²ΡΠ²ΠΎΠ΄ Π±ΡΠ΄Π΅Ρ (ΠΏΠΎΡΡΠ΄ΠΎΠΊ ΡΡΡΠΎΠΊ "ΠΠΎΡΡΡΠΈΠ½Π° Π²ΠΈΠ΄ΠΈΡ..." ΠΌΠΎΠΆΠ΅Ρ Π²Π°ΡΡΠΈΡΠΎΠ²Π°ΡΡΡΡ ΠΈΠ·-Π·Π° Π½Π΅Π΄Π΅ΡΠ΅ΡΠΌΠΈΠ½ΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΠ»Π°Π½ΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π³ΠΎΡΡΡΠΈΠ½):
ΠΠ°ΠΏΡΡΠΊ Π³ΠΎΡΡΡΠΈΠ½...
ΠΠΆΠΈΠ΄Π°Π½ΠΈΠ΅ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ Π³ΠΎΡΡΡΠΈΠ½...
ΠΠΎΡΡΡΠΈΠ½Π° Π²ΠΈΠ΄ΠΈΡ i = 0
ΠΠΎΡΡΡΠΈΠ½Π° Π²ΠΈΠ΄ΠΈΡ i = 1
ΠΠΎΡΡΡΠΈΠ½Π° Π²ΠΈΠ΄ΠΈΡ i = 2
ΠΡΠ΅ Π³ΠΎΡΡΡΠΈΠ½Ρ Π·Π°Π²Π΅ΡΡΠ΅Π½Ρ.
Use code with caution.
ΠΠ»ΠΈ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ:
ΠΠ°ΠΏΡΡΠΊ Π³ΠΎΡΡΡΠΈΠ½...
ΠΠΆΠΈΠ΄Π°Π½ΠΈΠ΅ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ Π³ΠΎΡΡΡΠΈΠ½...
ΠΠΎΡΡΡΠΈΠ½Π° Π²ΠΈΠ΄ΠΈΡ i = 2
ΠΠΎΡΡΡΠΈΠ½Π° Π²ΠΈΠ΄ΠΈΡ i = 0
ΠΠΎΡΡΡΠΈΠ½Π° Π²ΠΈΠ΄ΠΈΡ i = 1
ΠΡΠ΅ Π³ΠΎΡΡΡΠΈΠ½Ρ Π·Π°Π²Π΅ΡΡΠ΅Π½Ρ.
ΠΠΎΠ΄Π²ΠΎΡ Π·Π°ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π² ΡΠΎΠΌ, ΡΡΠΎ ΠΊΠΎΠ΄ Π²ΡΠ³Π»ΡΠ΄ΠΈΡ ΠΊΠ°ΠΊ ΠΊΠ»Π°ΡΡΠΈΡΠ΅ΡΠΊΠΈΠΉ ΠΏΡΠΈΠΌΠ΅Ρ ΠΎΡΠΈΠ±ΠΊΠΈ Π·Π°Ρ Π²Π°ΡΠ° ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΡΠΈΠΊΠ»Π°, Π½ΠΎ ΠΈΠ·-Π·Π° ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π² ΡΠ·ΡΠΊΠ΅ Π½Π°ΡΠΈΠ½Π°Ρ Ρ Go 1.22, ΠΎΠ½ ΡΠ΅ΠΏΠ΅ΡΡ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ "ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ" Π±Π΅Π· Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ ΡΠ²Π½ΠΎΠ³ΠΎ ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ (i := i).